import axios, { AxiosInstance , AxiosRequestConfig} from 'axios';
import conf from '../config';


/**
 * 如果直接使用 Response 会给到data属性
 * const res = await axios.get<Response>('/admin/user/login', values);
 */

const instance = () => {
	const instance: AxiosInstance = axios.create({
		baseURL: conf.baseUrl
	});
    // 此处采用统一的拦截器处理，如果有特殊的其他逻辑的处理统一放到wrapRequest 做处理
    /**
     * 拦截器处理流程：
     *    请求拦截器是遵循倒序，也就是先添加的后执行 栈
     *    响应拦截器是遵循正序，先添加的先执行 队列
     */
	instance.interceptors.request.use(
		(config) => {
			// 请求拦截器
			return config;
		},
		(err) => {
			return Promise.reject(err);
		}
	);
	instance.interceptors.response.use(
		(response) => {
			// 响应拦截器
			return response;
		},
		(err) => {
			return Promise.reject(err);
		}
	);

	return instance;
};

// 导出一个函数，主要是处理后续的拦截器
export default instance;
